/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package persistencia;


import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.*;
import java.text.*;
import java.util.*;
import videogest.*;
import java.sql.Date;

/**
 *
 * @author Administrador
 */
public class persistenciaFacturas {

    public static FacturaProductos dameFacturasProductor(String codigo) throws FileNotFoundException, IOException, ParseException {
        FacturaProductos facturaproductos = null;
        Date fecha = null;
        String codigof = null;
        String CIFProveedor = null;
        List<Producto> productosIn=null;
        float total = 0;
        Connection con = null;
        Statement st = null;
        ResultSet rs = null;
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");


        try {

            Class.forName("com.mysql.jdbc.Driver").newInstance();

            con = DriverManager.getConnection("jdbc:mysql://localhost/videogest", "root", "root");

            st = con.createStatement();


            String sSql = "select * from facturaproductos where codigofactura='" + codigo + "'";
            rs = st.executeQuery(sSql);


            rs.next();
            total = rs.getFloat("totalapagar");
            codigof = rs.getString("codigofactura");
            CIFProveedor = rs.getString("cifproveedor");
            fecha = (Date) df.parse(rs.getString("fecha"));

            System.out.println(fecha);

            /*rs.close();
            st.close();
            con.close();*/
            productosIn = dameProductosFactura(codigo);

            facturaproductos = new FacturaProductos(codigof, fecha, productosIn, total, CIFProveedor);


        } catch (InstantiationException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de Instanciacion. Detalle del error!!");
            System.out.println(ex);
        } catch (IllegalAccessException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de Acceso. Detalle del error!!");
            System.out.println(ex);
        } catch (SQLException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de SQL. Detalle del error!!");
            System.out.println(ex.getMessage());
        } catch (ClassNotFoundException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error!! No encuentra \"com.mysql.jdbc.Driver\". Detalle del error!!");
            System.out.println(ex);
        }finally{
            try {
                rs.close();
                st.close();
                con.close();
            } catch (SQLException ex) {
                //Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
                System.out.println("Error de SQL, al cerrar la conexion. Detalle del Error!!");
                System.out.println(ex);
            }
        }

        return facturaproductos;
    }

    public static List<Producto> dameProductosFactura(String codigofactura) throws FileNotFoundException, IOException, ParseException {
         List<Producto> productosConsultados=new ArrayList();
        float total = 0;
        Connection con2 = null;
        Statement st2 = null;
        ResultSet rs2 = null;
        String codigop = null;
        char[] codigoChar;

        try {

            Class.forName("com.mysql.jdbc.Driver").newInstance();

            con2 = DriverManager.getConnection("jdbc:mysql://localhost/videogest", "root", "root");

            st2 = con2.createStatement();

            rs2 = st2.executeQuery("select * from facturaproducto where codigofactura='" + codigofactura + "';");

            while (rs2.next()) {
                codigop = rs2.getString("codigoproducto");
                codigoChar = codigop.toCharArray();

                    if(codigoChar[0]=='P')
                    {
                        Pelicula p = (Pelicula) Pelicula.damePelicula(codigop);
                        productosConsultados.add(p);
                    }
                    else if(codigoChar[0]=='V')
                    {
                        Videojuego v = (Videojuego) Videojuego.dameVideojuego(codigop);
                        productosConsultados.add(v);
                    }
            }

        } catch (InstantiationException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de Instanciacion. Detalle del error!!");
            System.out.println(ex);
        } catch (IllegalAccessException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de Acceso. Detalle del error!!");
            System.out.println(ex);
        } catch (SQLException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de SQL. Detalle del error!!");
            System.out.println(ex.getMessage());
        } catch (ClassNotFoundException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error!! No encuentra \"com.mysql.jdbc.Driver\". Detalle del error!!");
            System.out.println(ex);
        }finally{
            try {
                rs2.close();
                st2.close();
                con2.close();
            } catch (SQLException ex) {
                //Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
                System.out.println("Error de SQL, al cerrar la conexion. Detalle del Error!!");
                System.out.println(ex);
            }
        }
        return productosConsultados;
    }

    public static void alta(FacturaProductos facturaProductor) {
        int i = 0;
        Connection con = null;
        Statement st =  null;
        DateFormat df = new SimpleDateFormat("yyyy/MM/dd");
        String fechaAlta = df.format(facturaProductor.getFecha());

        try {

            Class.forName("com.mysql.jdbc.Driver").newInstance();

            con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/videogest", "root", "root");

            st = (Statement) con.createStatement();

            String sSql = "insert into facturaproductos values('" + facturaProductor.getCodigoFactura() + "','" + fechaAlta + "'," + facturaProductor.getTotalAPagar() + ",'" + facturaProductor.getCIFProveedor() + "')";
            i = st.executeUpdate(sSql);

            for(Producto p:facturaProductor.getProductos())
            {
                //voy metiendo en la tabla facturas de la BBDD los datos de la factura junto con el código de cada producto
                sSql = "insert into facturaproducto values('" + facturaProductor.getCodigoFactura() + "','" + p.getCodigo() + "')";
                i = st.executeUpdate(sSql);
               
            }


        } catch (InstantiationException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de Instanciacion. Detalle del error!!");
            System.out.println(ex);
        } catch (IllegalAccessException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de Acceso. Detalle del error!!");
            System.out.println(ex);
        } catch (SQLException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de SQL. Detalle del error!!");
            System.out.println(ex);
        } catch (ClassNotFoundException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error!! No encuentra \"com.mysql.jdbc.Driver\". Detalle del error!!");
            System.out.println(ex);
        }finally{
            try {
                st.close();
                con.close();
            } catch (SQLException ex) {
                //Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
                System.out.println("Error de SQL, al cerrar la conexion. Detalle del Error!!");
                System.out.println(ex);
            }
        }

        if(i>0){
            System.out.println("Se ha grabado correctamente la insercion en la base de datos...");
        }else{
            System.out.println("ERROR! No se ha podido grabar la insercion en la base de datos.");
        }
    }

    public static FacturaSuministros dameFacturaSuministro(String codigo) throws FileNotFoundException, IOException {
        FacturaSuministros facturasuministros = null;
        Date fecha = null;
        String codigoS = null;
        String concepto = null;
        float totalapagar = 0;
        char[] codigoChar;
        float total = 0;
        Connection con = null;
        Statement st =  null;
        ResultSet rs = null;

        try {

            Class.forName("com.mysql.jdbc.Driver").newInstance();

            con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/videogest", "root", "root");

            st = (Statement) con.createStatement();

            rs = st.executeQuery("select * from facturasuministros where codigofactura='" + codigo + "';");


            while (rs.next()) {
                fecha = rs.getDate("fecha");
                total = rs.getFloat("totalapagar");
                codigoS = rs.getString("codigofactura");
                concepto = rs.getString("concepto");
            }

                facturasuministros = new FacturaSuministros(codigoS, fecha, concepto, totalapagar);
                /** hay que decrementar el código del archivo codigosFactura.txt porque arriba, al
                 *  me creo un objeto Factura y me esta creando un código nuevo, incrementándolo
                 */
                System.out.print(facturasuministros);




        } catch (InstantiationException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de Instanciacion. Detalle del error!!");
            System.out.println(ex);
        } catch (IllegalAccessException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de Acceso. Detalle del error!!");
            System.out.println(ex);
        } catch (SQLException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de SQL. Detalle del error!!");
            System.out.println(ex);
        } catch (ClassNotFoundException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error!! No encuentra \"com.mysql.jdbc.Driver\". Detalle del error!!");
            System.out.println(ex);
        }finally{
            try {
                rs.close();
                st.close();
                con.close();
            } catch (SQLException ex) {
                //Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
                System.out.println("Error de SQL, al cerrar la conexion. Detalle del Error!!");
                System.out.println(ex);
            }
        }

        return facturasuministros;
    }

    public static void altaSuministro(FacturaSuministros suministro) {
         DateFormat df = new SimpleDateFormat("yyyy/MM/dd");
        String fechaAlta = df.format(suministro.getFecha());
        int i = 0;
        Connection con = null;
        Statement st =  null;

        try {

            Class.forName("com.mysql.jdbc.Driver").newInstance();

            con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/videogest", "root", "root");

            st = (Statement) con.createStatement();


            String sSql;
            sSql = "insert into facturasuministros values('" + suministro.getCodigoFactura() + "','" + fechaAlta + "','" + suministro.getConcepto() + "'," + suministro.getTotalAPagar() + ")";
            i = st.executeUpdate(sSql);

        } catch (InstantiationException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de Instanciacion. Detalle del error!!");
            System.out.println(ex);
        } catch (IllegalAccessException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de Acceso. Detalle del error!!");
            System.out.println(ex);
        } catch (SQLException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de SQL. Detalle del error!!");
            System.out.println(ex);
        } catch (ClassNotFoundException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error!! No encuentra \"com.mysql.jdbc.Driver\". Detalle del error!!");
            System.out.println(ex);
        }finally{
            try {
                st.close();
                con.close();
            } catch (SQLException ex) {
                //Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
                System.out.println("Error de SQL, al cerrar la conexion. Detalle del Error!!");
                System.out.println(ex);
            }
        }

        if(i>0){
            System.out.println("Se ha grabado correctamente la insercion en la base de datos...");
        }else{
            System.out.println("ERROR! No se ha podido grabar la insercion en la base de datos.");
        }

    }






}
